Предыдущая глава ВЫВОД НА ЭКРАН ЧИСЕЛ В ШЕСТНАДЦАТЕРИЧНОЙ ФОРМЕ Следующий раздел

В ходе рассмотрения предыдущего раздела мы научились выводить на экран двоичное содержимое регистров. Аналогично делается вывод на экран и двоичного содержимого ячеек ОП. Но гораздо удобнее для человека увидеть содержимое этих же ячеек не в двоичной, а в шестнадцатеричной системе. Напомним, что шестнадцатеричное число фактически есть сокращенная форма записи двоичного числа. При этом каждая шестнадцатеричная цифра соответствует четырем двоичным цифрам, то есть описывает содержимое четырех битов памяти. 

В ходе рассмотрения данного вопроса производится практическое знакомство с тремя флагами состояния, командами для работы с этими флагами, а также с некоторыми другими важными машинными командами.

 

6.1. Флаги состояния

Кроме флага переноса CF существуют другие флаги состояния. Рассмотрим три из них, которые описывают результат последней арифметической операции.

Допустим, что мы выполнили машинную команду вычитания sub. Одним из флагов состояния, устанавливаемых в зависимости от результата этой команды, является флаг нуля ZF ("Zero Flag"). Если результат команды sub есть 0, то флаг нуля будет установлен в 1. На распечатке регистров это значение обозначается как ZR (от "Zero" – нуль). Если результат арифметической операции не равен нулю, то флаг нуля сбрасывается в 0 – NZ (от "Not Zero" – не нуль).

В в е д и т е  в память команду “sub ax,bx”. Протрассируйте  ее  с  одинаковыми и с разными числами в регистрах АХ и ВХ, наблюдая за состоянием флага нуля  (ZR или NZ).

Флаг знака SF ("Sign Flag") принимает значение 1 (на распечатке регистров NG – от "Negative"), если результат предыдущей арифметической операции отрицательный. Если результат неотрицательный (ноль или положительный), то флаг знака принимает значение 0 (на распечатке PL –"Plus"). В ы п о л н и т е  трассировку команды “sub ax,bx” при разных содержимых и ВХ, и наблюдая за флагом знака.

Флаг переполнения OF устанавливается в 1 в том случае, если знаковый бит изменился в той ситуации, когда этого не должно было произойти. Например, если мы сложим два положительных числа 7000h и 6000h, то получим отрицательное число D000h (представление в дополнительном коде числа -2288). Это ошибка, так как результат переполняет слово. На листинге регистров переполнение обозначается как OV ("Overflow" – переполнение). Если предыдущая арифметическая команда не дала переполнения, то флаг  сбрасывается в 0. На распечатке  регистров  это  значение  обозначается как NV   ("No Overflow"). П р о в е р ь т е  установку флага переполнения, протрассировав команду sub или add.

Использование команды sub для сравнения двух чисел неудобно, так как эта команда производит изменение первого из чисел. Другая команда, cmp (от “Compare” – сравнение), производит сравнение двух чисел без их изменения. Результат сравнения используется только для установки флагов.

З а г р у з и т е  в регистры АХ и ВХ одинаковые числа, например F5h, и протрассируйте команду “cmp ax,bx”. При этом убедитесь, что установлен флаг нуля (ZR), но оба регистра сохранили свое значение  –  F5h.

 


Предыдущая глава В начало Следующий раздел